package controllers;

import java.util.Map;
import java.util.Set;

import models.ExercicioTreino;
import models.PadraoTreino;
import models.Treino;
import play.data.Form;
import play.mvc.Controller;
import play.mvc.Result;
import play.mvc.Security;
import dao.DAOExercicio;
import dao.DAOPadraoTreino;
import dao.DAOTreino;


@Security.Authenticated(Seguranca.class)
public class TreinoControle extends Controller {

	private static Form<Treino> formTreino = new Form<Treino>(Treino.class);
	  
    public static Result index() {
        return ok(views.html.treino.index.render(""));
    }
	
	public static Result cadastrarView(){
		DAOPadraoTreino daoPadraoT = new DAOPadraoTreino();
		try {
			return ok(views.html.treino.cadastrar.render(daoPadraoT.select()));
		} catch(Exception e){
			return internalServerError("Erro ao visualizar Treino.");
		}
	}
	
	public static Result editarView(int id){
		DAOTreino dao = new DAOTreino();
		try{
			Treino treino = new Treino();
			treino = dao.select(id);
			return ok(views.html.treino.editar.render(treino));
		}catch(Exception e){
			return internalServerError("Erro ao visualizar Treino.");
		}
	}
	
	
	public static Result listarView(){
		DAOTreino dao = new DAOTreino();
		try {
			Set<Treino> treinos = dao.select();
			return ok(views.html.treino.listar.render(treinos));
		} catch (Exception e) {
			return internalServerError("Erro ao visualizar Treino.");
		}
		
	}
	
	public static Result cadastrar(){
		Form<Treino> fTreino = formTreino.bindFromRequest();
		Treino treino = new Treino();//fTreino.get();
		DAOTreino dao = new DAOTreino();
		
		treino.idAluno = Integer.parseInt(session("usuario_selecionado_id"));
		treino.idProfessor = Integer.parseInt(session("usuario_id"));
		
		try {
			treino.dataInicial = request().getQueryString("dataInicial");
			treino.dataFinal = request().getQueryString("dataInicial");
		} catch (Exception e) {}
		
		int qt = Integer.parseInt(request().getQueryString("quantidadeExercicio"));
		
		for (int i = 0; i < qt; i++) {
			ExercicioTreino et = new ExercicioTreino();
			
			et.idExercicio = Integer.parseInt(request().getQueryString("exercicio_"+i));
			
			try {
				et.serie = Integer.parseInt(request().getQueryString("serie"+ et.idExercicio));				
			} catch (Exception e) {}
			
			try {
				et.repeticao = Integer.parseInt(request().getQueryString("repeticao"+ et.idExercicio));				
			} catch (Exception e) {}

			try {
				et.descanso = Integer.parseInt(request().getQueryString("descanso"+ et.idExercicio));
			} catch (Exception e) {}
			

			treino.exercicio.add(et);
			
			System.out.println(et);
		}
		
		try{
			dao.insert(treino);
			return listarView();
		}catch(Exception e){
			return internalServerError("Erro ao cadastrar Treino.");
		}
	}
	
	public static Result editar(){
		Form<Treino> novoPt = formTreino.bindFromRequest();
		Treino grupo = novoPt.get();
		DAOTreino dao = new DAOTreino();
		try{
			dao.update(grupo);
			return listarView();
		}catch(Exception e){
			e.printStackTrace();
			return ok(views.html.treino.index.render("Erro ao editar Treino."));
		}
		
	}
	
	public static Result remover(){
		Form<Treino> fTreino = formTreino.bindFromRequest();
		Treino treino = fTreino.get();
		
		System.out.println("Deletentado treino de id ["+ treino.idTreino +"]");
		
		DAOTreino dao = new DAOTreino();
		try{
			dao.delete(treino);
			return listarView();
		}catch(Exception e){
			e.printStackTrace();
			return ok(views.html.treino.index.render("Erro ao remover Treino."));
		}
	}
	
}
